package cn.yiyuan.base.untli;

import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class ClassUtils {
    /**
     * 获取一个包下面的所有类全限定名
     * @param packageNames 包
     * @return
     */
    public static List<Class> getAllClassName(String packageNames){  //需要扫描那些包
        String[] split = packageNames.split(",");
        List<Class> result = new ArrayList<>();
        for (String packageName : split) {   //循环
            // 包相对路径
            String packagePath = packageName.replace(".","/"); //把包路径中的点替换为目录
            // 资源URL    ClassLoader类加载器  得到项目的根路径
            URL url = ClassLoader.getSystemResource(""); //获取classapth
            File[] files = new File(url.getPath() + packagePath) //获取classapth+packagePath,就是完整的路径       (url.getPath()自己的路径  +   packagePath包路径
                    .listFiles(file -> file.getName().endsWith(".class"));  // .class 获取字节码文件  .class
            //判断是否为空
            if(files == null || files.length < 1){
                continue;
            }
            for(File file : files){
                // 输出类名称
                //如果不为空  通过文件拿到文件名
                String fileName = file.getName();
                fileName = fileName.substring(0,fileName.lastIndexOf("."));
                //全限定类名         包路径  + 文件名
                String allName = packageName+"."+fileName;
                try {
                    result.add(Class.forName(allName));
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
            }
        }
        return result;
    }
}